#ifndef _YEP_ENGINE_MOUSE_HANDLER_HPP
#define _YEP_ENGINE_MOUSE_HANDLER_HPP

#include "../common.hpp"
#include "../math/Vector2.hpp"

namespace yep
{
class MouseMoveEvent;
class MouseButtonEvent;

/**
 * @brief Handle mouse events.
 **/
class MouseHandler
{
public:
    virtual ~MouseHandler() {}

    /**
     * @brief Returns the mouse is over the object.
     **/
    virtual bool isInside( Vector2 mousePosition ) = 0;

    /**
     * @brief Returns the depth. The lesser depths are handled first.
     **/
    virtual double getDepth() = 0;

    /**
     * @brief Occurs when the mouse enters on the object.
     **/
    virtual void evMouseOver( MouseMoveEvent &event ) {}

    /**
     * @brief Occurs when the mouse exits from the object.
     **/
    virtual void evMouseOut( MouseMoveEvent &event ) {}

    /**
     * @brief Occurs when the mouse moves on the object.
     **/
    virtual void evMouseMove( MouseMoveEvent &event ) {}

    /**
     * @brief Occurs when a mouse button is released.
     **/
    virtual void evMouseUp( MouseButtonEvent &event ) {}

    /**
     * @brief Occurs when a mouse button is pressed.
     **/
    virtual void evMouseDown( MouseButtonEvent &event ) {}

};

}

#endif // _YEP_ENGINE_MOUSE_HANDLER_HPP

